package beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.AreaTematicaDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.AreaTematica;
import modelo.Proyecto;

@ManagedBean 
@RequestScoped
public class EditarAreasTematicasBean {
	
	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<AreaTematica> areasTematicas;
	private List<AreaTematica> seleccionBorrar;
	private Proyecto proyecto;
	private List <AreaTematica> seleccionArea;
	private List<AreaTematica> todasAreas;
	private ProyectoDao proyectoDao;
	private String origen = null; 

	
	
	public List<AreaTematica> getAreasTematicas() {
		return areasTematicas;
	}

	public void setAreasTematicas(List<AreaTematica> areasTematicas) {
		this.areasTematicas = areasTematicas;
	}

	public List<AreaTematica> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<AreaTematica> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public List<AreaTematica> getSeleccionArea() {
		return seleccionArea;
	}

	public void setSeleccionArea(List<AreaTematica> seleccionArea) {
		this.seleccionArea = seleccionArea;
	}

	public List<AreaTematica> getTodasAreas() {
		return todasAreas;
	}

	public void setTodasAreas(List<AreaTematica> todasAreas) {
		this.todasAreas = todasAreas;
	}

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public ProyectoDao getProyectoDao() {
		return proyectoDao;
	}

	public void setProyectoDao(ProyectoDao proyectoDao) {
		this.proyectoDao = proyectoDao;
	}

	@PostConstruct
	public void init(){
									
		// Seteo el proyecto a usar
		this.setProyecto(getEditProyectoBean().getProyecto());
		// Traigo las areas
		this.setAreasTematicas((List<AreaTematica>) this.getProyecto().getAreas_tematicas());					
	
		AreaTematicaDao areaTematicaDao = new AreaTematicaDao();
		try {
			this.setTodasAreas(areaTematicaDao.getTodasAreas());
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
	}

	public void agregar(){
		List<AreaTematica> areas = this.getAreasTematicas();
		List<AreaTematica> selec = this.getSeleccionArea();
		for (AreaTematica area : selec) {
			if(!areas.contains(area))
				areas.add(area);
		}		
		this.setAreasTematicas(areas);
		actualizarProyecto();
	}
	
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setAreas_tematicas(getAreasTematicas());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}

	public void borrar(){
		List<AreaTematica> aBorrar = this.getSeleccionBorrar();
		
		for (AreaTematica area : aBorrar) {
			this.getAreasTematicas().remove(area);
		}
		actualizarProyecto();
	}
	
	public String volver(){
		return "irEditarProyectos";
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}
	
	
}
